class User(object):
    def __init__(self, username: str, id: int):
        self.username = username
        self.id = id


class Group(object):
    def __init__(self, display_name: str, id: int):
        self.display_name = display_name
        self.id = id


class Repository(object):
    def __init__(self, name: str, id: int):
        self.name = name
        self.id = id


class Root(object):
    def __init__(self, *args, **kwargs):
        ...

    def get_users(self, *args, **kwargs):
        return [User('guest2838', 1), User('guest2782', 2)]

    def get_groups(self, *args, **kwargs):
        return [Group('demo', 1)]

    def get_repositories(self, *args, **kwargs):
        return [Repository('Review Board', 1)]


class RBClient(object):
    """Entry point for accessing RB resources through the web API.

    By default the synchronous transport will be used. To use a
    different transport, provide the transport class in the
    'transport_cls' parameter.
    """

    def __init__(self, url, *args, **kwargs):
        self.url = url

    def get_root(self, *args, **kwargs):
        return Root(*args, **kwargs)
